/**
 * @param {string} path
 * @returns {Boolean}
 */
export function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path)
}

/**
 * 检测用户账户是否符合需求要求
 * @param {*} str
 * @returns {Boolean}
 */
export function validUsername(str) {
  return str.length > 0 ? true : false
}

/**
 * 检测传入的字符串是否数字
 * @param {String} str
 * @returns {Boolean}
 */
export function isNumber(str) {
  const reg = /^[0-9]+\.?[0-9]*$/
  if (str && reg.test(str)) {
    return true
  }
  return false
}

export function isIDNumber(rule, value, callback) {
  const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
  if (value && reg.test(value) === false) {
    callback(new Error('请输入正确的身份证'))
  } else {
    callback()
  }
}

/**
 * 根据原型链，判断不同的数据类型
 */
const toString = Object.prototype.toString

export function is(val, type) {
  return toString.call(val) === `[object ${type}]`
}

export function isString(val) {
  return is(val, 'String')
}

export function isArray(val) {
  return val && Array.isArray(val)
}

/**
 * 判断str是否json
 * @param {string} val
 * @return 如果是json返回对应的json对象，不然返回false
 */
export function isJson(val) {
  if (isString(val)) {
    try {
      return JSON.parse(val)
    } catch (error) {
      return false
    }
  }
  return false
}

/**
 * 判断属性
 * @param {*} val 输入属性
 */
export function isHas(val) {
  if (val !== null && val !== undefined) {
    return true
  }
  return false
}
export function isObject(val) {
  return is(val, 'Object')
}

// 判断是否为方法
export function isFunction(val) {
  return typeof val === 'function'
}
